package com.dts.yjnb.service.mapper;

import com.dts.yjnb.service.domain.CreditInfo;
import com.dts.yjnb.service.domainDto.CreditInfoDTO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author XianXing
* @description 针对表【credit_info(信贷信息表)】的数据库操作Mapper
* @createDate 2025-10-30 11:08:18
* @Entity com.dts.yjnb.service.domain.CreditInfo
*/
@Mapper
public interface CreditInfoMapper {

    /**
     * 分页查询信贷信息
     *
     * @param creditInfo 查询条件
     * @return 分页结果
     */
    Page<CreditInfo> pageQuery(CreditInfoDTO creditInfo);

    /**
     * 根据ID查询信贷信息
     *
     * @param id 信贷信息ID
     * @return 信贷信息
     */
    CreditInfo getById(Long id);

    /**
     * 新增信贷信息
     *
     * @param creditInfo 信贷信息
     * @return 影响行数
     */
    int add(CreditInfo creditInfo);

    /**
     * 修改信贷信息
     *
     * @param creditInfo 信贷信息
     * @return 影响行数
     */
    int update(CreditInfo creditInfo);

    /**
     * 删除信贷信息
     *
     * @param id 信贷信息ID
     * @return 影响行数
     */
    int delete(Long id);

    /**
     * 批量删除信贷信息
     *
     * @param ids 信贷信息ID数组
     * @return 影响行数
     */
    int deleteBatch(@Param("ids") Long[] ids);

    /**
     * 搜索信贷信息
     *
     * @param creditInfoDTO 查询条件
     * @return 搜索结果
     */
    List<CreditInfo> search(CreditInfoDTO creditInfoDTO);

    /**
     * 批量修改状态
     *
     * @param ids 信贷信息ID数组
     * @param status 状态
     * @return 影响行数
     */
    int updateStatus(@Param("ids") Long[] ids, @Param("status") Integer status);

    /**
     * 批量修改推荐状态
     *
     * @param ids 信贷信息ID数组
     * @param isRecommend 推荐状态
     * @return 影响行数
     */
    int updateRecommend(@Param("ids") Long[] ids, @Param("isRecommend") Integer isRecommend);

    /**
     * 统计指定年月的信贷信息新增数量
     *
     * @param year 年份
     * @param month 月份（1-12）
     * @return 该月的信贷信息数量
     */
    Integer countCreditInfoByYearMonth(@Param("year") int year, @Param("month") int month);

    /**
     * 查询所有信贷信息（用于导出）
     *
     * @return 信贷信息列表
     */
    List<CreditInfo> selectAll();

    /**
     * 查询最近12个月的数据（按月份分组统计）
     *
     * @param startYear 开始年份
     * @param startMonth 开始月份（1-12）
     * @param lastMonthYear 结束年份
     * @param lastMonth 结束月份（1-12）
     * @return 12个月的数据列表，按1-12月顺序返回
     */
    List<Integer> get12MonthData(@Param("startYear") int startYear, 
                                 @Param("startMonth") int startMonth,
                                 @Param("lastMonthYear") int lastMonthYear, 
                                 @Param("lastMonth") int lastMonth);
}